home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 May: Technology Seed / Mac Tech Seed May '97.toast / Mac OS 8b5 / Docs-Interfaces-Libs / Text Encoding Convertors / Headers / Unicode.h < prev   
Encoding:
C/C++ Source or Header  |  1997-04-29  |  12.1 KB  |  283 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Unicode.h
  3.  
  4.      Contains:    Unicode Interfaces.
  5.  
  6.      Version:    System 8.0
  7.  
  8.      Copyright:    © 1984-1997 by Apple Computer, Inc.
  9.                  All rights reserved.
  10.   
  11. */
  12. #ifndef __UNICODE__
  13. #define __UNICODE__
  14.  
  15. #ifndef __TYPES__
  16. #include <Types.h>
  17. #endif
  18. #ifndef __TEXTCOMMON__
  19. #include <TextCommon.h>
  20. #endif
  21. #ifndef __MIXEDMODE__
  22. #include <MixedMode.h>
  23. #endif
  24.  
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28.  
  29. #if PRAGMA_IMPORT_SUPPORTED
  30. #pragma import on
  31. #endif
  32.  
  33. #if PRAGMA_ALIGN_SUPPORTED
  34. #pragma options align=mac68k
  35. #endif
  36.  
  37.  
  38. /* Basic types for Unicode characters and strings: */
  39. typedef UniChar *UniCharArrayPtr;
  40. typedef const UniChar *ConstUniCharArrayPtr;
  41. /* Unicode conversion contexts: */
  42. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  43. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  44. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  45. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  46. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  47. /* UnicodeMapVersion type & values */
  48. typedef SInt32 UnicodeMapVersion;
  49.  
  50. enum {
  51.     kUnicodeUseLatestMapping    = -1
  52. };
  53.  
  54. /* Types used in conversion */
  55. struct UnicodeMapping {
  56.     TextEncoding                     unicodeEncoding;
  57.     TextEncoding                     otherEncoding;
  58.     UnicodeMapVersion                 mappingVersion;
  59. };
  60. typedef struct UnicodeMapping UnicodeMapping;
  61.  
  62. typedef UnicodeMapping *UnicodeMappingPtr;
  63. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  64. /* Control flags for ConvertUnicodeToText and ConvertTextToUnicode */
  65.  
  66. enum {
  67.     kUnicodeUseFallbacksBit        = 0,
  68.     kUnicodeKeepInfoBit            = 1,
  69.     kUnicodeDirectionalityBits    = 2,
  70.     kUnicodeVerticalFormBit        = 4,
  71.     kUnicodeLooseMappingsBit    = 5,
  72.     kUnicodeStringUnterminatedBit = 6,
  73.     kUnicodeTextRunBit            = 7,
  74.     kUnicodeKeepSameEncodingBit    = 8
  75. };
  76.  
  77.  
  78. enum {
  79.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  80.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  81.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  82.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  83.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  84.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  85.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  86.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  87. };
  88.  
  89. /* Values for kUnicodeDirectionality field */
  90.  
  91. enum {
  92.     kUnicodeDefaultDirection    = 0,
  93.     kUnicodeLeftToRight            = 1,
  94.     kUnicodeRightToLeft            = 2,
  95.     kUnicodeInvalidDirection    = 3
  96. };
  97.  
  98. /* Directionality masks for control flags */
  99.  
  100. enum {
  101.     kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
  102.     kUnicodeLeftToRightMask        = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
  103.     kUnicodeRightToLeftMask        = kUnicodeRightToLeft << kUnicodeDirectionalityBits,
  104.     kUnicodeInvalidDirectionMask = kUnicodeInvalidDirection << kUnicodeDirectionalityBits
  105. };
  106.  
  107. /* Control flags for TruncateForUnicodeToText: */
  108. /*
  109.  None are currently defined.
  110.  Previously we had two:
  111.         kUnicodeTextElementSafeBit = 0
  112.         kUnicodeRestartSafeBit = 1
  113.  However, kUnicodeTextElementSafeBit is unnecessary since it is always implied by a call
  114.  to TruncateForUnicodeToText. Also, kUnicodeRestartSafeBit was unimplemented and is
  115.  probably unnecessary, since restart-safeness is handled by setting kUnicodeKeepInfoBit
  116.  with ConvertFromUnicodeToText. TruncateForUnicodeToText can still be called with these
  117.  flags set without generating a paramErr, but the bits have no effect on its operation.
  118. */
  119. /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
  120.  
  121. enum {
  122.     kUnicodeMatchUnicodeBaseBit    = 0,
  123.     kUnicodeMatchUnicodeVariantBit = 1,
  124.     kUnicodeMatchUnicodeFormatBit = 2,
  125.     kUnicodeMatchOtherBaseBit    = 3,
  126.     kUnicodeMatchOtherVariantBit = 4,
  127.     kUnicodeMatchOtherFormatBit    = 5
  128. };
  129.  
  130.  
  131. enum {
  132.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  133.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  134.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  135.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  136.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  137.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  138. };
  139.  
  140. /* Control flags for SetFallbackUnicodeToText */
  141.  
  142. enum {
  143.     kUnicodeFallbackSequencingBits = 0
  144. };
  145.  
  146.  
  147. enum {
  148.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  149. };
  150.  
  151. /* values for kUnicodeFallbackSequencing field */
  152.  
  153. enum {
  154.     kUnicodeFallbackDefaultOnly    = 0L,
  155.     kUnicodeFallbackCustomOnly    = 1L,
  156.     kUnicodeFallbackDefaultFirst = 2L,
  157.     kUnicodeFallbackCustomFirst    = 3L
  158. };
  159.  
  160. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  161. /* Caller-supplied entry point to a fallback handler */
  162. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, TextPtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  163.  
  164. #if GENERATINGCFM
  165. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  166. #else
  167. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  168. #endif
  169.  
  170. enum {
  171.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  172.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  173.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  174.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  175.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  176.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
  177.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  178.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  179.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  180.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  181. };
  182.  
  183. #if GENERATINGCFM
  184. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  185.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  186. #else
  187. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  188.         ((UnicodeToTextFallbackUPP) (userRoutine))
  189. #endif
  190.  
  191. #if GENERATINGCFM
  192. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  193.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  194. #else
  195. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  196.         (*(userRoutine))((srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  197. #endif
  198. #endif
  199. /* Function prototypes */
  200. /* Create a new TextToUnicodeInfo structure. */
  201. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
  202.  
  203. extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
  204.  
  205. /* Create a new UnicodeToTextInfo structure. */
  206. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
  207.  
  208. extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
  209.  
  210. /* Create a new UnicodeToTextRunInfo structure. */
  211. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  212.  
  213. extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  214.  
  215. /* Dispose of a TextToUnicodeInfo structure. */
  216. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
  217.  
  218. /* Dispose of a UnicodeToTextInfo structure. */
  219. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
  220.  
  221. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextInfo);
  222.  
  223. /* Convert a string to Unicode. */
  224. extern pascal OSStatus ConvertFromTextToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oSourceRead, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  225.  
  226. /* Convert a string from Unicode. */
  227. extern pascal OSStatus ConvertFromUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr);
  228.  
  229. extern pascal OSStatus ConvertFromUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iEncodingRunBufLen, ItemCount *oEncodingRunOutLen, TextEncodingRun oEncodingRuns[]);
  230.  
  231. /* Truncate a multibyte string at a safe place. */
  232. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  233.  
  234. /* Truncate a Unicode string at a safe place. */
  235. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  236.  
  237. /* Convert a Pascal string to Unicode. */
  238. extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  239.  
  240. /* Convert a Unicode string to Pascal. */
  241. extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
  242.  
  243. /* Count the available conversion mappings. */
  244. extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
  245.  
  246. /* Get a list of the available conversion mappings. */
  247. extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
  248.  
  249. /* Change the TextToUnicodeInfo to another mapping. */
  250. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  251.  
  252. /* Change the UnicodeToTextInfo to another mapping. */
  253. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  254.  
  255. /* Create a new UnicodeToTextRunInfo structure. */
  256. extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  257.  
  258. /* Convert a string from Unicode. */
  259. extern pascal OSStatus ConvertFromUnicodeToScriptCodeRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iScriptRunBufLen, ItemCount *oScriptRunOutLen, ScriptCodeRun oScriptCodeRuns[]);
  260.  
  261. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  262. /* Setup the fallback handler for converting Unicode To Text. */
  263. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  264.  
  265. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  266.  
  267. #endif
  268.  
  269. #if PRAGMA_ALIGN_SUPPORTED
  270. #pragma options align=reset
  271. #endif
  272.  
  273. #if PRAGMA_IMPORT_SUPPORTED
  274. #pragma import off
  275. #endif
  276.  
  277. #ifdef __cplusplus
  278. }
  279. #endif
  280.  
  281. #endif /* __UNICODE__ */
  282.  
  283.